// 视频播放器相关的组合式函数
import { ref } from 'vue'
// 保留playStop用于清理WVP推流（可选）
import { playStop } from '@/api/wvp/play'

export function useVideoPlayer(cesiumUtils) {
  // 响应式数据
  const showVideoPlayer = ref(false)
  const cusPlayerRef = ref(null)
  const currentCamera = ref(null)
  const streamInfo = ref(null)

  // 打开视频播放器
  const openVideoPlayer = async (camera) => {
    console.log('打开视频播放器，摄像头:', camera.name, '状态:', camera.status)
    
    // 如果摄像头状态为离线，给用户提示但仍然尝试播放
    if (camera.status !== 'online') {
      console.warn('摄像头状态为离线，但仍尝试播放:', camera.status)
      cesiumUtils.showError('摄像头可能离线，正在尝试连接...')
    }

    currentCamera.value = camera
    
    // 先显示播放器对话框
    showVideoPlayer.value = true
    
    // 然后获取流信息
    await startVideoPlayback(camera)
  }

  // 关闭视频播放器
  const closeVideoPlayer = () => {
    stopVideoPlayback(currentCamera.value)
    showVideoPlayer.value = false
    currentCamera.value = null
  }

  // 启动视频播放
  const startVideoPlayback = async (camera) => {
    try {
      console.log('开始启动视频播放，摄像头信息:', camera)
      
      // 先停止之前的播放
      stopVideoPlayback()
      
      // 🎯 新逻辑：优先使用数据库中的RTSP URL，固定使用ws_flv格式
      if (camera.rtsp_url) {
        console.log('✅ 使用数据库中的RTSP地址播放:', camera.rtsp_url)
        
        // 从RTSP URL构建ws_flv地址
        const wvpHost = window.location.hostname || 'localhost'
        let streamId = ''
        
        // 从RTSP URL中提取流ID
        const rtspMatch = camera.rtsp_url.match(/\/rtp\/(.+)$/)
        if (rtspMatch) {
          streamId = rtspMatch[1]
        } else if (camera.wvp_device_id && camera.wvp_channel_id) {
          streamId = `${camera.wvp_device_id}_${camera.wvp_channel_id}`
        }
        
        // 构建ws_flv地址
        const ws_flv_url = `ws://${wvpHost}:8092/rtp/${streamId}.live.flv`
        
        const streamData = {
          ws_flv: ws_flv_url,
          url: ws_flv_url,
          playUrl: ws_flv_url,
          streamUrl: ws_flv_url,
          // 保留其他格式作为备用
          rtsp: camera.rtsp_url,
          flv: `http://${wvpHost}:8092/rtp/${streamId}.live.flv`,
          hls: `http://${wvpHost}:8092/rtp/${streamId}.live.m3u8`
        }
        
        streamInfo.value = streamData
        console.log('📺 构建的ws_flv流地址:', ws_flv_url)
        cesiumUtils.showSuccess(`使用ws_flv格式播放 - ${camera.name}`)
        return
      }
      
      // 🔄 回退逻辑：如果数据库没有RTSP URL，构建ws_flv地址
      if (camera.wvp_device_id && camera.wvp_channel_id) {
        console.log('⚠️ 数据库无RTSP地址，构建WVP ws_flv地址...')
        
        const wvpHost = window.location.hostname || 'localhost'
        const streamId = `${camera.wvp_device_id}_${camera.wvp_channel_id}`
        
        // 直接构建ws_flv地址
        const ws_flv_url = `ws://${wvpHost}:8092/rtp/${streamId}.live.flv`
        
        console.log('🔧 构建的ws_flv地址:', ws_flv_url)
        
        const streamData = {
          ws_flv: ws_flv_url,
          url: ws_flv_url,
          playUrl: ws_flv_url,
          streamUrl: ws_flv_url,
          // 保留其他格式作为备用
          rtsp: `rtsp://${wvpHost}:554/rtp/${streamId}`,
          flv: `http://${wvpHost}:8092/rtp/${streamId}.live.flv`,
          hls: `http://${wvpHost}:8092/rtp/${streamId}.live.m3u8`
        }
        
        streamInfo.value = streamData
        console.log('📺 构建的ws_flv流地址信息:', streamData)
        cesiumUtils.showSuccess(`使用ws_flv格式播放 - ${camera.name}`)
        return
      }
      
      // ❌ 最后的错误处理
      console.error('❌ 摄像头配置不完整:', {
        rtsp_url: camera.rtsp_url,
        wvp_device_id: camera.wvp_device_id,
        wvp_channel_id: camera.wvp_channel_id
      })
      
      cesiumUtils.showError('摄像头配置不完整：缺少RTSP地址和WVP配置')

    } catch (error) {
      console.error('视频播放失败:', error)
      let errorMessage = '视频播放失败'
      
      if (error.message) {
        errorMessage += ': ' + error.message
      }
      
      cesiumUtils.showError(errorMessage)
    }
  }

  // 停止视频播放
  const stopVideoPlayback = async (camera) => {
    console.log('🛑 停止视频播放')
    
    // 关闭当前播放器
    const playerRef = cusPlayerRef.value
    if (playerRef) {
      console.log('关闭视频播放器')
      // 尝试不同播放器的停止方法
      if (typeof playerRef.stopVideo === 'function') {
        playerRef.stopVideo()
      } else if (typeof playerRef.closePlayer === 'function') {
        playerRef.closePlayer()
      } else if (typeof playerRef.destroy === 'function') {
        playerRef.destroy()
      }
    }
    
    // 清空流信息
    streamInfo.value = null
    
    // 可选：如果需要通知WVP服务器停止推流（仅在使用WVP API时）
    if (camera && camera.wvp_device_id && camera.wvp_channel_id && !camera.rtsp_url) {
      try {
        await playStop(camera.wvp_device_id, camera.wvp_channel_id)
        console.log('📡 WVP视频流已停止')
      } catch (error) {
        console.warn('⚠️ 停止WVP视频流失败:', error)
      }
    }
  }

  // 清理函数
  const cleanup = () => {
    stopVideoPlayback(currentCamera.value)
  }

  return {
    // 响应式数据
    showVideoPlayer,
    cusPlayerRef,
    currentCamera,
    streamInfo,
    
    // 方法
    openVideoPlayer,
    closeVideoPlayer,
    startVideoPlayback,
    stopVideoPlayback,
    cleanup
  }
}